#ifndef VENUS_UI_LOGIC_WINDOW_H
#define VENUS_UI_LOGIC_WINDOW_H

namespace venus {
class LogicWindow {
public:
  LogicWindow(int x, int y, int width, int height)
      : x_(x), y_(y), width_(width), height_(height) { }
  virtual ~LogicWindow() = 0;
  int width() const { return width_; }
  int height() const { return height_; }
  int x() const { return x_; }
  int y() const { return y_; }
protected:
  void set_width(int width) { width_ = width; }
  void set_height(int height) { height_ = height; }
  //the flush is mandatory for behaving correctly
  virtual void OnDisplay() { }
  virtual void OnResize(int width, int height) { }
  virtual void OnIdle() { }
  virtual void OnKeyboard(unsigned char key, int x, int y) { }
  virtual void OnSpecialKey(int key, int x, int y) { }
  virtual void OnMouse(int button, int state, int x, int y) { }
  virtual void OnMouseMove(int x, int y) { }
private:
  int width_, height_;
  int x_, y_;
};
}

#endif//VENUS_UI_LOGIC_WINDOW_H
